JavaScriptã®ãªãã·ã§ãã«ãã§ã€ãã³ã°ãç¿åŸãã倿§ãªã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã§æ·±ããã¹ãããããªããžã§ã¯ãã«å®å šã«ã¢ã¯ã»ã¹ããæ¹æ³ãåŠã³ãŸããããå®çšçãªäŸãšãã¹ããã©ã¯ãã£ã¹ã玹ä»ããŸãã
JavaScriptã®ãªãã·ã§ãã«ãã§ã€ãã³ã°ã®å€å±€ãã¹ã: 倿®µéã§ã®å®å šãªã¢ã¯ã»ã¹
ãŠã§ãéçºã®ãã€ãããã¯ãªäžçãç¹ã«è€éãªããŒã¿æ§é ãAPIãæ±ãå Žåãæ·±ããã¹ãããããªããžã§ã¯ãããããã£ã«å®å
šã«ã¢ã¯ã»ã¹ããããšã¯ãããã課é¡ã§ããåŸæ¥ã®æ¹æ³ã§ã¯ãäžé£ã®ãã§ãã¯ãå¿
èŠãšãªããåé·ã§ãšã©ãŒãçºçããããã³ãŒãã«ãªããã¡ã§ãããJavaScriptã«å°å
¥ããããªãã·ã§ãã«ãã§ã€ãã³ã° (?.)ã¯ããã®ãããªã·ããªãªã®åŠçæ¹æ³ã«é©åœããããããç¹ã«å€å±€ãã¹ããæ±ãéã«ãããç°¡æœã§å
ç¢ãªã³ãŒããå¯èœã«ããŸããããã®æçš¿ã§ã¯ãå€å±€ãã¹ãã«ããããªãã·ã§ãã«ãã§ã€ãã³ã°ã®è€éãã«æ·±ãèžã¿èŸŒã¿ãäžçã®éçºè
åãã«å®çšçãªäŸãšå
·äœçãªæŽå¯ãæäŸããŸãã
åé¡: ãšã©ãŒãªãã§ãã¹ããããããŒã¿ãããã²ãŒããã
åœéçãªEã³ããŒã¹ãã©ãããã©ãŒã ããååŸããããŒã¿ãæ±ã£ãŠãããšæ³åããŠãã ããããã®ããŒã¿ã¯æ¬¡ã®ããã«æ§é åãããŠããå¯èœæ§ããããŸã:
const order = {
id: 'ORD12345',
customer: {
profile: {
name: 'Anya Sharma',
contact: {
email: 'anya.sharma@example.com',
phoneNumbers: [
{ type: 'mobile', number: '+91 98765 43210' },
{ type: 'work', number: '+91 11 2345 6789' }
]
}
},
preferences: {
language: 'en-IN'
}
},
items: [
{ productId: 'PROD001', quantity: 2, price: 50.00 },
{ productId: 'PROD002', quantity: 1, price: 120.50 }
],
shippingAddress: {
street: '123 Gandhi Road',
city: 'Mumbai',
country: 'India'
}
};
ããŠãé¡§å®¢ã®æºåž¯é»è©±çªå·ãååŸããããšããŸãããããªãã·ã§ãã«ãã§ã€ãã³ã°ãªãã§ã¯ã次ã®ããã«æžããããããŸãã:
let mobileNumber;
if (order && order.customer && order.customer.profile && order.customer.profile.contact && order.customer.profile.contact.phoneNumbers) {
mobileNumber = order.customer.profile.contact.phoneNumbers.find(phone => phone.type === 'mobile')?.number;
}
console.log(mobileNumber); // Output: '+91 98765 43210'
ãã®ã³ãŒãã¯æ©èœããŸãããåé·ã§ããäžéãããã㣠(äŸ: contact ãŸã㯠phoneNumbers) ã®ãããããæ¬ èœããŠããå Žåã¯ã©ããªãã§ããããïŒ ã³ãŒãã¯TypeError: ãæªå®çŸ©ã®ããããã£ãèªã¿åããŸãã (èªã¿åãäž '...')ããã¹ããŒããŸããããã¯ãããŸããŸãªãœãŒã¹ãåžžã«å®å
šãªæ
å ±ãè¿ããªãAPIããã®ããŒã¿ãæ±ãå Žåã«ãé »ç¹ã«çºçãããã°ã®åå ãšãªããŸãã
ãªãã·ã§ãã«ãã§ã€ãã³ã° (?.) ã®å°å
¥
ãªãã·ã§ãã«ãã§ã€ãã³ã°ã¯ããã¹ããããããããã£ã«ã¢ã¯ã»ã¹ããããã®ããã¯ãªãŒã³ãªæ§æãæäŸããŸãã?.æŒç®åã¯ãnullãŸãã¯undefinedå€ã«ééãããšããã«è©äŸ¡ãç絡ããããšã©ãŒãã¹ããŒãã代ããã«undefinedãè¿ããŸãã
åºæ¬çãªäœ¿ãæ¹
åã®äŸããªãã·ã§ãã«ãã§ã€ãã³ã°ã䜿ã£ãŠæžãçŽããŠã¿ãŸããã:
const order = {
id: 'ORD12345',
customer: {
profile: {
name: 'Anya Sharma',
contact: {
email: 'anya.sharma@example.com',
phoneNumbers: [
{ type: 'mobile', number: '+91 98765 43210' },
{ type: 'work', number: '+91 11 2345 6789' }
]
}
},
preferences: {
language: 'en-IN'
}
},
items: [
{ productId: 'PROD001', quantity: 2, price: 50.00 },
{ productId: 'PROD002', quantity: 1, price: 120.50 }
],
shippingAddress: {
street: '123 Gandhi Road',
city: 'Mumbai',
country: 'India'
}
};
const mobileNumber = order?.customer?.profile?.contact?.phoneNumbers?.find(phone => phone.type === 'mobile')?.number;
console.log(mobileNumber); // Output: '+91 98765 43210'
ããã¯æ Œæ®µã«èªã¿ããããªããŸãããã§ãŒã³ã®ããããã®éšå (äŸ: order.customer.profile.contact) ãnullãŸãã¯undefinedã§ããå ŽåãåŒã¯ãšã©ãŒãªãã§undefinedãšè©äŸ¡ãããŸãã
æ¬ èœããããããã£ãé©åã«åŠçãã
顧客ã«é£çµ¡å çªå·ãèšèŒãããŠããªãã·ããªãªãèããŠã¿ãŸããã:
const orderWithoutContact = {
id: 'ORD67890',
customer: {
profile: {
name: 'Kenji Tanaka'
// No contact information here
}
}
};
const mobileNumberForKenji = orderWithoutContact?.customer?.profile?.contact?.phoneNumbers?.find(phone => phone.type === 'mobile')?.number;
console.log(mobileNumberForKenji); // Output: undefined
ã¯ã©ãã·ã¥ãã代ããã«ãã³ãŒãã¯undefinedãé©åã«è¿ããŸããããã«ãããããã©ã«ãå€ãæäŸããããããŒã¿ã®æ¬ åŠãé©åã«åŠçãããã§ããŸãã
å€å±€ãã¹ã: è€æ°ã®ãªãã·ã§ãã«æŒç®åãé£çµãã
ãªãã·ã§ãã«ãã§ã€ãã³ã°ã®çã®åã¯ãè€æ°ã®ãã¹ãã¬ãã«ãæ±ããšãã«çºæ®ãããŸããè€æ°ã®?.æŒç®åãé£çµããŠãè€éãªããŒã¿æ§é ãå®å
šã«èŸ¿ãããšãã§ããŸãã
äŸ: ãã¹ããããããªãã¡ã¬ã³ã¹ã«ã¢ã¯ã»ã¹ãã
顧客ã®åªå èšèªã«ã¢ã¯ã»ã¹ããŠã¿ãŸããããããã¯è€æ°ã¬ãã«æ·±ããã¹ããããŠããŸã:
const customerLanguage = order?.customer?.preferences?.language;
console.log(customerLanguage); // Output: 'en-IN'
preferencesãªããžã§ã¯ããæ¬ èœããŠããå ŽåããŸãã¯ãã®äžã«languageããããã£ãååšããªãã£ãå ŽåãcustomerLanguageã¯undefinedã«ãªããŸãã
ãã¹ããããæ§é å ã®é åãæ±ã
ãã¹ããããæ§é ã®äžéšã§ããé
åãæ±ãå Žåããªãã·ã§ãã«ãã§ã€ãã³ã°ãšfindãmapãªã©ã®é
åã¡ãœãããçµã¿åãããããã€ã³ããã¯ã¹ã§èŠçŽ ã«ã¢ã¯ã»ã¹ãããããããšãã§ããŸãã
æåã®é»è©±çªå·ã®ã¿ã€ããååŸããŠã¿ãŸããã (ååšãããšä»®å®ããŠ):
const firstPhoneNumberType = order?.customer?.profile?.contact?.phoneNumbers?.[0]?.type;
console.log(firstPhoneNumberType); // Output: 'mobile'
ããã§ã?.[0]ã¯phoneNumbersé
åã®æåã®èŠçŽ ã«å®å
šã«ã¢ã¯ã»ã¹ããŸããããphoneNumbersãnullãundefinedããŸãã¯ç©ºã®é
åã§ããå Žåãããã¯undefinedãšè©äŸ¡ãããŸãã
ãªãã·ã§ãã«ãã§ã€ãã³ã°ãšNullish Coalescing (??) ã®çµã¿åãã
ãªãã·ã§ãã«ãã§ã€ãã³ã°ã¯ãããããã£ãæ¬ èœããŠããããnull/undefinedã§ããå Žåã«ããã©ã«ãå€ãæäŸããããã«ãNullish Coalescing Operator (??)ãšçµã¿åãããŠãã䜿çšãããŸãã
顧客ã®ã¡ãŒã«ã¢ãã¬ã¹ãååŸããããšããŸããããããå©çšã§ããªãå Žåã¯ããæäŸãããŠããŸããããããã©ã«ãå€ãšããŠèšå®ããŸã:
const customerEmail = order?.customer?.profile?.contact?.email ?? 'Not provided';
console.log(customerEmail); // Output: 'anya.sharma@example.com'
// Example with missing email:
const orderWithoutEmail = {
id: 'ORD11223',
customer: {
profile: {
name: 'Li Wei',
contact: {
// No email property
}
}
}
};
const liWeiEmail = orderWithoutEmail?.customer?.profile?.contact?.email ?? 'Not provided';
console.log(liWeiEmail); // Output: 'Not provided'
??æŒç®åã¯ãå·ŠåŽã®ãªãã©ã³ããnullãŸãã¯undefinedã®å Žåã«å³åŽã®ãªãã©ã³ããè¿ãããã以å€ã®å Žåã¯å·ŠåŽã®ãªãã©ã³ããè¿ããŸããããã¯ãããã©ã«ãå€ãç°¡æœã«èšå®ããã®ã«éåžžã«åœ¹ç«ã¡ãŸãã
ã°ããŒãã«éçºã«ããããŠãŒã¹ã±ãŒã¹
ãªãã·ã§ãã«ãã§ã€ãã³ã°ãšnullåäœæŒç®åã¯ãã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«åãçµãéçºè ã«ãšã£ãŠéåžžã«è²ŽéãªããŒã«ã§ã:
-
åœéåã¢ããªã±ãŒã·ã§ã³ (i18n): ããŒã«ã©ã€ãºãããã³ã³ãã³ãããŠãŒã¶ãŒèšå®ãååŸããéãããŒã¿æ§é ãæ·±ããã¹ããããããšããããŸãããªãã·ã§ãã«ãã§ã€ãã³ã°ã¯ãç¹å®ã®èšèªãªãœãŒã¹ãèšå®ãæ¬ èœããŠããŠããã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããªãããšãä¿èšŒããŸããäŸãã°ã翻蚳ãžã®ã¢ã¯ã»ã¹ã¯æ¬¡ã®ããã«ãªããããããŸãã:
translations[locale]?.messages?.welcome ?? 'Welcome'ã -
API飿º: ç°ãªããããã€ããŒãå°åããã®APIã¯ãå¿çæ§é ãç°ãªãå ŽåããããŸããäžéšã®ãã£ãŒã«ãã¯ãªãã·ã§ã³ã§ãã£ãããæ¡ä»¶ä»ãã§ååšãããããå¯èœæ§ããããŸãããªãã·ã§ãã«ãã§ã€ãã³ã°ã䜿çšãããšãåºç¯ãªãšã©ãŒåŠçãªãã§ããããã®å€æ§ãªAPIããããŒã¿ãå®å
šã«æœåºã§ããŸãã
è€æ°ã®ãµãŒãã¹ãããŠãŒã¶ãŒããŒã¿ãååŸããããšãèããŠã¿ãŸããã:
const userProfile = serviceA.getUser(userId)?.profile?.details ?? serviceB.getProfile(userId)?.data?.attributes; - èšå®ãã¡ã€ã«: ç¹ã«åçã«ããŒãããããããªã¢ãŒããœãŒã¹ããããŒãããããããè€éãªèšå®ãã¡ã€ã«ã¯ãå®å šãªã¢ã¯ã»ã¹ããæ©æµãåããŸããèšå®ãæ·±ããã¹ããããŠãããåžžã«ååšãããšã¯éããªãå Žåããªãã·ã§ãã«ãã§ã€ãã³ã°ã¯ã©ã³ã¿ã€ã ãšã©ãŒãé²ããŸãã
- ãµãŒãããŒãã£ã©ã€ãã©ãª: ãµãŒãããŒãã£ã®JavaScriptã©ã€ãã©ãªãšé£æºããå Žåããããã®å éšããŒã¿æ§é ã¯åžžã«å®å šã«ææžåãããŠããããäºæž¬å¯èœã§ãã£ãããããšã¯éããŸããããªãã·ã§ãã«ãã§ã€ãã³ã°ã¯ã»ãŒããã£ããããæäŸããŸãã
ãšããžã±ãŒã¹ãšèæ ®äºé
ãªãã·ã§ãã«ãã§ã€ãã³ã° vs. è«çAND (&&)
ãªãã·ã§ãã«ãã§ã€ãã³ã°ãå°å ¥ãããåã¯ãéçºè ã¯ãã§ãã¯ã®ããã«è«çANDæŒç®åããã䜿çšããŠããŸãã:
const userEmail = order && order.customer && order.customer.profile && order.customer.profile.contact && order.customer.profile.contact.email;
ããã¯æ©èœããŸãããéèŠãªéãããããŸã: &&æŒç®åã¯ãæåŸã®çå€ãªãã©ã³ããŸãã¯æåã®åœå€ãªãã©ã³ãã®å€ãè¿ããŸããããã¯ãorder.customer.profile.contact.emailã空æåå ('') ã§ãã£ãå Žå (ããã¯åœå€ã§ã)ãåŒå
šäœã''ãšè©äŸ¡ãããããšãæå³ããŸããäžæ¹ããªãã·ã§ãã«ãã§ã€ãã³ã°ã¯nullãŸãã¯undefinedã specifically ãã§ãã¯ããŸããnullåäœæŒç®å (??) ã¯ãnullãŸãã¯undefinedã®å Žåã«ã®ã¿ããªã¬ãŒããããããããã©ã«ãå€ãåŠçããçŸä»£çã§æšå¥šãããæ¹æ³ã§ãã
颿°ã«å¯Ÿãããªãã·ã§ãã«ãã§ã€ãã³ã°
ãªãã·ã§ãã«ãã§ã€ãã³ã°ã¯ãæ¡ä»¶ä»ãã§é¢æ°ãåŒã³åºãããã«ã䜿çšã§ããŸã:
const userSettings = {
theme: 'dark',
updatePreferences: function(prefs) { console.log('Updating preferences:', prefs); }
};
// Safely call updatePreferences if it exists
userSettings?.updatePreferences?.({ theme: 'light' });
const noUpdateSettings = {};
noUpdateSettings?.updatePreferences?.({ theme: 'dark' }); // Does nothing, no error
ããã§ãuserSettings?.updatePreferences?.()ã¯æåã«userSettingsã«updatePreferencesãååšãããã©ããããã§ãã¯ããæ¬¡ã«ãã®çµæãåŒã³åºãå¯èœãªé¢æ°ã§ãããã©ããããã§ãã¯ããŸããããã¯ããªãã·ã§ã³ã®ã¡ãœãããã³ãŒã«ããã¯ã«åœ¹ç«ã¡ãŸãã
ãªãã·ã§ãã«ãã§ã€ãã³ã°ãšdeleteæŒç®å
ãªãã·ã§ãã«ãã§ã€ãã³ã°ã¯deleteæŒç®åãšã¯çžäºäœçšããŸãããããããã£ãæ¡ä»¶ä»ãã§åé€ããããã«?.ã䜿çšããããšã¯ã§ããŸããã
ããã©ãŒãã³ã¹ãžã®åœ±é¿
極ããŠããã©ãŒãã³ã¹ãéèŠãªã«ãŒããéåžžã«æ·±ãäºæž¬å¯èœãªæ§é ã®å Žåãé床ãªãªãã·ã§ãã«ãã§ã€ãã³ã°ã¯ããããªãªãŒããŒããããå°å ¥ããå¯èœæ§ããããŸããããããã»ãšãã©ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãã³ãŒãã®æçããä¿å®æ§ããšã©ãŒé²æ¢ã®å©ç¹ããããããªããã©ãŒãã³ã¹ã®éããã¯ããã«äžåããŸããçŸä»£ã®JavaScriptãšã³ãžã³ã¯ãããã®æŒç®åã«é«åºŠã«æé©åãããŠããŸãã
å€å±€ãã¹ãã®ããã®ãã¹ããã©ã¯ãã£ã¹
-
?.ãäžè²«ããŠäœ¿çšãã: æœåšçã«æ¬ èœããŠãããã¹ããããããããã£ã«ã¢ã¯ã»ã¹ããéã¯åžžã«ããªãã·ã§ãã«ãã§ã€ãã³ã°æŒç®åã䜿çšããŠãã ããã -
??ãšçµã¿åãããŠããã©ã«ããèšå®ãã: ããããã£ãnullãŸãã¯undefinedã®å Žåã«é©åãªããã©ã«ãå€ãæäŸããããã«ãnullåäœæŒç®å (??) ã䜿çšããŠãã ããã - äžå¿ èŠãªé床ãªãã§ã€ãã³ã°ãé¿ãã: ããããã£ã絶察ã«ååšãããšç¢ºä¿¡ããŠããå Žå (äŸãã°ãå³å¯ãªæ€èšŒã§èªåã§æ§ç¯ããæ·±ããã¹ãããããªããžã§ã¯ãå ã®ããªããã£ãããããã£ãªã©) ã¯ãããããªããã©ãŒãã³ã¹åäžã®ããã«ãªãã·ã§ãã«ãã§ã€ãã³ã°ãçç¥ããããšããããŸãããããã¯æ³šæããŠè¡ãã¹ãã§ãã
- å¯èªæ§ãç ç²ã«ããªã: ãªãã·ã§ãã«ãã§ã€ãã³ã°ã¯ã³ãŒããç°¡æœã«ããŸãããçè§£ãã«ãããªãã»ã©æ·±ããã§ã€ãã³ã°ããããšã¯é¿ããŠãã ãããéåžžã«è€éãªã·ããªãªã§ã¯ãåå²ä»£å ¥ããã«ããŒé¢æ°ãæ€èšããŠãã ããã
- 培åºçã«ãã¹ããã: ç¹ã«å€éšã·ã¹ãã ãšçµ±åããå Žåããªãã·ã§ãã«ãã§ã€ãã³ã°ããžãã¯ãæ¬ èœããŒã¿ã®ãã¹ãŠã®äºæ³ãããã±ãŒã¹ãã«ããŒããŠããããšã確èªããŠãã ããã
- TypeScriptãæ€èšãã: å€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãTypeScriptã¯éçºäžã«ãããã®æœåšçãªãšã©ãŒã®å€ããææã§ããéçåä»ããæäŸããJavaScriptã®ã©ã³ã¿ã€ã å®å šæ©èœãšè£å®ãåããŸãã
çµè«
JavaScriptã®ãªãã·ã§ãã«ãã§ã€ãã³ã° (?.) ãšnullåäœæŒç®å (??) ã¯ããã¹ããããããŒã¿æ§é ã®åŠçæ¹æ³ã倧å¹
ã«æ¹åãã匷åãªææ°æ©èœã§ãããããã¯ãæœåšçã«æ¬ èœããŠããããããã£ã«ã¢ã¯ã»ã¹ããããã®å
ç¢ã§ãèªã¿ããããå®å
šãªæ¹æ³ãæäŸããã©ã³ã¿ã€ã ãšã©ãŒã®å¯èœæ§ãåçã«äœæžããŸãããããã®æŒç®åã䜿ã£ãå€å±€ãã¹ããç¿åŸããããšã§ãäžçäžã®éçºè
ã¯ãã°ããŒãã«APIãåœéåãããã³ã³ãã³ãããŸãã¯è€éãªå
éšããŒã¿ã¢ãã«ãæ±ãå Žåã§ããããå埩åãããä¿å®ããããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãããããã®ããŒã«ã掻çšããŠãããã¯ãªãŒã³ã§å®å
šããããŠãããã§ãã·ã§ãã«ãªJavaScriptã³ãŒããæžããŸãããã